@PreAuthorize এবং @Secured এর মাধ্যমে Authorization কনফিগার করা

Java Technologies - স্প্রিং সিকিউরিটি (Spring Security) - Role-Based এবং Permission-Based Authorization
155

Spring Security-তে Authorization পরিচালনা করতে @PreAuthorize এবং @Secured অ্যানোটেশন ব্যবহার করা হয়। এগুলো মেথড-লেভেল অথোরাইজেশনের জন্য ব্যবহৃত হয়। এর মাধ্যমে নির্ধারণ করা হয় কোন ব্যবহারকারী বা রোল নির্দিষ্ট মেথড অ্যাক্সেস করতে পারবে।


@PreAuthorize এবং @Secured এর মধ্যে পার্থক্য

বৈশিষ্ট্য@PreAuthorize@Secured
অধিকরণSpring Security Expression ব্যবহার করে।শুধুমাত্র রোল ভিত্তিক।
সাপোর্টজটিল স্পেলিং সমর্থন করে (e.g., hasRole, hasAuthority, @annotation).সহজ অথোরাইজেশন সমর্থন করে।
ব্যবহার ক্ষেত্রমেথড লেভেল অথোরাইজেশনের জন্য।সরাসরি রোল চেক করার জন্য।

1. @PreAuthorize ব্যবহার করা

@PreAuthorize Spring Security-এর স্পেলিং ভাষা ব্যবহার করে অথোরাইজেশন পরিচালনা করে। এটি মেথড চালানোর আগে চেক করে।

কনফিগারেশন

import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.method.configuration.EnableMethodSecurity;

@Configuration
@EnableMethodSecurity
public class SecurityConfig {
    // No specific method-level security configuration needed.
}

মেথড উদাহরণ

import org.springframework.stereotype.Service;
import org.springframework.security.access.prepost.PreAuthorize;

@Service
public class MyService {

    @PreAuthorize("hasRole('ADMIN')")
    public String adminAccess() {
        return "Admin Access Granted";
    }

    @PreAuthorize("hasRole('USER')")
    public String userAccess() {
        return "User Access Granted";
    }

    @PreAuthorize("hasRole('USER') and hasRole('ADMIN')")
    public String adminAndUserAccess() {
        return "Admin and User Access Granted";
    }

    @PreAuthorize("#username == authentication.name")
    public String accessOwnProfile(String username) {
        return "Accessing own profile: " + username;
    }
}

2. @Secured ব্যবহার করা

@Secured সরাসরি রোল নির্ধারণের জন্য ব্যবহৃত হয়। এটি অপেক্ষাকৃত সহজ অথোরাইজেশন প্রয়োজন হলে ব্যবহৃত হয়।

কনফিগারেশন

import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.method.configuration.EnableMethodSecurity;

@Configuration
@EnableMethodSecurity(securedEnabled = true) // Enable @Secured annotation
public class SecurityConfig {
    // No specific method-level security configuration needed.
}

মেথড উদাহরণ

import org.springframework.stereotype.Service;
import org.springframework.security.access.annotation.Secured;

@Service
public class MyService {

    @Secured("ROLE_ADMIN")
    public String adminAccess() {
        return "Admin Access Granted";
    }

    @Secured("ROLE_USER")
    public String userAccess() {
        return "User Access Granted";
    }

    @Secured({"ROLE_USER", "ROLE_ADMIN"})
    public String adminAndUserAccess() {
        return "Admin and User Access Granted";
    }
}

Spring Security Context-এ রোল এবং অথোরিটি ব্যবস্থাপনা

In-Memory Authentication উদাহরণ

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.provisioning.InMemoryUserDetailsManager;

@Configuration
public class UserConfig {

    @Bean
    public InMemoryUserDetailsManager userDetailsManager() {
        UserDetails user = User.withDefaultPasswordEncoder()
            .username("user")
            .password("password")
            .roles("USER") // ROLE_USER হবে
            .build();

        UserDetails admin = User.withDefaultPasswordEncoder()
            .username("admin")
            .password("admin")
            .roles("ADMIN") // ROLE_ADMIN হবে
            .build();

        return new InMemoryUserDetailsManager(user, admin);
    }
}

3. Controller স্তরে @PreAuthorize এবং @Secured

Controller উদাহরণ

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.security.access.annotation.Secured;

@RestController
public class MyController {

    @GetMapping("/admin")
    @PreAuthorize("hasRole('ADMIN')")
    public String adminPage() {
        return "Welcome Admin!";
    }

    @GetMapping("/user")
    @Secured("ROLE_USER")
    public String userPage() {
        return "Welcome User!";
    }

    @GetMapping("/profile")
    @PreAuthorize("#username == authentication.name")
    public String profile(@RequestParam String username) {
        return "Welcome to your profile, " + username;
    }
}

4. @PreAuthorize এর শক্তিশালী স্পেলিং উদাহরণ

উন্নত অথোরাইজেশন

@PreAuthorize("hasAuthority('WRITE_PRIVILEGE') and hasRole('ADMIN')")
public String adminWriteAccess() {
    return "Admin Write Access Granted";
}

@PreAuthorize("hasAuthority('READ_PRIVILEGE') or hasRole('USER')")
public String userOrReadAccess() {
    return "User or Read Access Granted";
}

উপসংহার

  • @PreAuthorize: জটিল অথোরাইজেশন লজিক প্রয়োগের জন্য ব্যবহার করা হয়।
  • @Secured: সহজ এবং নির্দিষ্ট রোল ভিত্তিক অথোরাইজেশনের জন্য কার্যকর।

আপনার প্রয়োজন অনুযায়ী এই অ্যানোটেশনগুলো ব্যবহার করতে পারেন। @PreAuthorize জটিল লজিক এবং স্পেলিং ব্যবহারের জন্য আরও শক্তিশালী এবং কার্যকর।

Content added By
Promotion
NEW SATT AI এখন আপনাকে সাহায্য করতে পারে।

Are you sure to start over?

Loading...